1 % Generator: GNU source-highlight, by Lorenzo Bettini, http://www.gnu.org/software/src-highlite
3 {\ttfamily \raggedright {
5 \mbox{}\textit{\textcolor{Brown
}{/*
}} \\
6 \mbox{}\textit{\textcolor{Brown
}{\ \ cap
[i
][j
]\ =\ Capacidad\ de\ la\ arista\ (i,\ j).
}} \\
7 \mbox{}\textit{\textcolor{Brown
}{\ \ prev
[i
]\ =\ Predecesor\ del\ nodo\ i\ en\ un\ camino\ de\ aumentación.
}} \\
8 \mbox{}\textit{\textcolor{Brown
}{\ */
}} \\
9 \mbox{}\textcolor{ForestGreen
}{int
}\ cap
\textcolor{BrickRed
}{[}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{][}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{],
}\ prev
\textcolor{BrickRed
}{[}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{];
} \\
11 \mbox{}vector
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{int
}\textcolor{BrickRed
}{$>$
}\ g
\textcolor{BrickRed
}{[}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{];
}\
\textit{\textcolor{Brown
}{//Vecinos\ de\ cada\ nodo.
}} \\
12 \mbox{}\textbf{\textcolor{Blue
}{inline
}}\
\textcolor{ForestGreen
}{void
}\
\textbf{\textcolor{Black
}{link
}}\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ u
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ v
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ c
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{}\ cap
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{=
}\ c
\textcolor{BrickRed
}{;
}\ g
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{].
}\textbf{\textcolor{Black
}{push$
\_$back
}}\textcolor{BrickRed
}{(
}v
\textcolor{BrickRed
}{),
}\ g
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{].
}\textbf{\textcolor{Black
}{push$
\_$back
}}\textcolor{BrickRed
}{(
}u
\textcolor{BrickRed
}{);
}\
\textcolor{Red
}{\
}} \\
13 \mbox{}\textit{\textcolor{Brown
}{/*
}} \\
14 \mbox{}\textit{\textcolor{Brown
}{\ \ Notar\ que\ link\ crea\ las\ aristas\ (u,\ v)\ \&\&\ (v,\ u)\ en\ el\ grafo\ g.\ Esto\ es\ necesario
}} \\
15 \mbox{}\textit{\textcolor{Brown
}{\ \ porque\ el\ algoritmo\ de\ Edmonds-Karp\ necesita\ mirar\ el\ "
{}back-edge"
{}\ (j,\ i)\ que\ se\ crea
}} \\
16 \mbox{}\textit{\textcolor{Brown
}{\ \ al\ bombear\ flujo\ a\ través\ de\ (i,\ j).\ Sin\ embargo,\ no\ modifica\ cap
[v
][u
],\ porque\ se
}} \\
17 \mbox{}\textit{\textcolor{Brown
}{\ \ asume\ que\ el\ grafo\ es\ dirigido.\ Si\ es\ no-dirigido,\ hacer\ cap
[u
][v
]\ =\ cap
[v
][u
]\ =\ c.
}} \\
18 \mbox{}\textit{\textcolor{Brown
}{\ */
}} \\
21 \mbox{}\textit{\textcolor{Brown
}{/*
}} \\
22 \mbox{}\textit{\textcolor{Brown
}{\ \ Método\
1:
}} \\
24 \mbox{}\textit{\textcolor{Brown
}{\ \ Mantener\ la\ red\ residual,\ donde\ residual
[i
][j
]\ =\ cuánto\ flujo\ extra\ puedo\ inyectar
}} \\
25 \mbox{}\textit{\textcolor{Brown
}{\ \ a\ través\ de\ la\ arista\ (i,\ j).
}} \\
27 \mbox{}\textit{\textcolor{Brown
}{\ \ Si\ empujo\ k\ unidades\ de\ i\ a\ j,\ entonces\ residual
[i
][j
]\ -=\ k\ y\ residual
[j
][i
]\ +=\ k
}} \\
28 \mbox{}\textit{\textcolor{Brown
}{\ \ (Puedo\ "
{}desempujar"
{}\ las\ k\ unidades\ de\ j\ a\ i).
}} \\
30 \mbox{}\textit{\textcolor{Brown
}{\ \ Se\ puede\ modificar\ para\ que\ no\ utilice\ extra\ memoria\ en\ la\ tabla\ residual,\ sino
}} \\
31 \mbox{}\textit{\textcolor{Brown
}{\ \ que\ modifique\ directamente\ la\ tabla\ cap.
}} \\
32 \mbox{}\textit{\textcolor{Brown
}{*/
}} \\
34 \mbox{}\textcolor{ForestGreen
}{int
}\ residual
\textcolor{BrickRed
}{[}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{][}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{];
} \\
35 \mbox{}\textcolor{ForestGreen
}{int
}\
\textbf{\textcolor{Black
}{fordFulkerson
}}\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ n
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ s
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ t
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
36 \mbox{}\ \
\textbf{\textcolor{Black
}{memcpy
}}\textcolor{BrickRed
}{(
}residual
\textcolor{BrickRed
}{,
}\ cap
\textcolor{BrickRed
}{,
}\
\textbf{\textcolor{Blue
}{sizeof
}}\ cap
\textcolor{BrickRed
}{);
} \\
38 \mbox{}\ \
\textcolor{ForestGreen
}{int
}\ ans\
\textcolor{BrickRed
}{=
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{;
} \\
39 \mbox{}\ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}\textbf{\textcolor{Blue
}{true
}}\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
40 \mbox{}\ \ \ \
\textbf{\textcolor{Black
}{fill
}}\textcolor{BrickRed
}{(
}prev
\textcolor{BrickRed
}{,
}\ prev
\textcolor{BrickRed
}{+
}n
\textcolor{BrickRed
}{,
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{);
} \\
41 \mbox{}\ \ \ \ queue
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{int
}\textcolor{BrickRed
}{$>$
}\ q
\textcolor{BrickRed
}{;
} \\
42 \mbox{}\ \ \ \ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{push
}}\textcolor{BrickRed
}{(
}s
\textcolor{BrickRed
}{);
} \\
43 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{size
}}\textcolor{BrickRed
}{()
}\
\textcolor{BrickRed
}{\&\&
}\ prev
\textcolor{BrickRed
}{[}t
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
44 \mbox{}\ \ \ \ \ \
\textcolor{ForestGreen
}{int
}\ u\
\textcolor{BrickRed
}{=
}\ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{front
}}\textcolor{BrickRed
}{();
} \\
45 \mbox{}\ \ \ \ \ \ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{pop
}}\textcolor{BrickRed
}{();
} \\
46 \mbox{}\ \ \ \ \ \ vector
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{int
}\textcolor{BrickRed
}{$>$
}\
\textcolor{BrickRed
}{\&
}out\
\textcolor{BrickRed
}{=
}\ g
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{];
} \\
47 \mbox{}\ \ \ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ k\
\textcolor{BrickRed
}{=
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{,
}\ m\
\textcolor{BrickRed
}{=
}\ out
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{size
}}\textcolor{BrickRed
}{();
}\ k
\textcolor{BrickRed
}{$<$
}m
\textcolor{BrickRed
}{;
}\
\textcolor{BrickRed
}{++
}k
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
48 \mbox{}\ \ \ \ \ \ \ \
\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ out
\textcolor{BrickRed
}{[}k
\textcolor{BrickRed
}{];
} \\
49 \mbox{}\ \ \ \ \ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
}v\
\textcolor{BrickRed
}{!=
}\ s\
\textcolor{BrickRed
}{\&\&
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\
\textcolor{BrickRed
}{\&\&
}\ residual
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{$>$
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{)
} \\
50 \mbox{}\ \ \ \ \ \ \ \ \ \ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{push
}}\textcolor{BrickRed
}{(
}v
\textcolor{BrickRed
}{);
} \\
51 \mbox{}\ \ \ \ \ \
\textcolor{Red
}{\
}} \\
52 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
54 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
}prev
\textcolor{BrickRed
}{[}t
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{)
}\
\textbf{\textcolor{Blue
}{break
}}\textcolor{BrickRed
}{;
} \\
56 \mbox{}\ \ \ \
\textcolor{ForestGreen
}{int
}\ bottleneck\
\textcolor{BrickRed
}{=
}\ INT$
\_$MAX
\textcolor{BrickRed
}{;
} \\
57 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ t
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{];
}\ u\
\textcolor{BrickRed
}{!=
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{;
}\ v\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{])
}\textcolor{Red
}{\
{} \\
58 \mbox{}\ \ \ \ \ \ bottleneck\
\textcolor{BrickRed
}{=
}\
\textbf{\textcolor{Black
}{min
}}\textcolor{BrickRed
}{(
}bottleneck
\textcolor{BrickRed
}{,
}\ residual
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]);
} \\
59 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
60 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ t
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{];
}\ u\
\textcolor{BrickRed
}{!=
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{;
}\ v\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{])
}\textcolor{Red
}{\
{} \\
61 \mbox{}\ \ \ \ \ \ residual
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{-=
}\ bottleneck
\textcolor{BrickRed
}{;
} \\
62 \mbox{}\ \ \ \ \ \ residual
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{][}u
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{+=
}\ bottleneck
\textcolor{BrickRed
}{;
} \\
63 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
64 \mbox{}\ \ \ \ ans\
\textcolor{BrickRed
}{+=
}\ bottleneck
\textcolor{BrickRed
}{;
} \\
65 \mbox{}\ \
\textcolor{Red
}{\
}} \\
66 \mbox{}\ \
\textbf{\textcolor{Blue
}{return
}}\ ans
\textcolor{BrickRed
}{;
} \\
67 \mbox{}\textcolor{Red
}{\
}} \\
71 \mbox{}\textit{\textcolor{Brown
}{/*
}} \\
72 \mbox{}\textit{\textcolor{Brown
}{\ \ Método\
2:
}} \\
74 \mbox{}\textit{\textcolor{Brown
}{\ \ Mantener\ la\ red\ de\ flujos,\ donde\ flow
[i
][j
]\ =\ Flujo\ que,\ err,\ fluye
}} \\
75 \mbox{}\textit{\textcolor{Brown
}{\ \ de\ i\ a\ j.\ Notar\ que\ flow
[i
][j
]\ puede\ ser\ negativo.\ Si\ esto\ pasa,
}} \\
76 \mbox{}\textit{\textcolor{Brown
}{\ \ es\ lo\ equivalente\ a\ decir\ que\ i\ "
{}absorve"
{}\ flujo\ de\ j,\ o\ lo\ que\ es
}} \\
77 \mbox{}\textit{\textcolor{Brown
}{\ \ lo\ mismo,\ que\ hay\ flujo\ positivo\ de\ j\ a\ i.
}} \\
79 \mbox{}\textit{\textcolor{Brown
}{\ \ En\ cualquier\ momento\ se\ cumple\ la\ propiedad\ de\ skew\ symmetry,\ es\ decir,
}} \\
80 \mbox{}\textit{\textcolor{Brown
}{\ \ flow
[i
][j
]\ =\ -flow
[j
][i
].\ El\ flujo\ neto\ de\ i\ a\ j\ es\ entonces\ flow
[i
][j
].
}} \\
82 \mbox{}\textit{\textcolor{Brown
}{*/
}} \\
84 \mbox{}\textcolor{ForestGreen
}{int
}\ flow
\textcolor{BrickRed
}{[}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{][}MAXN
\textcolor{BrickRed
}{+
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{];
} \\
85 \mbox{}\textcolor{ForestGreen
}{int
}\
\textbf{\textcolor{Black
}{fordFulkerson
}}\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ n
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ s
\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{int
}\ t
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
86 \mbox{}\ \
\textit{\textcolor{Brown
}{//memset(flow,\
0,\ sizeof\ flow);
}} \\
87 \mbox{}\ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ i
\textcolor{BrickRed
}{=
}\textcolor{Purple
}{0}\textcolor{BrickRed
}{;
}\ i
\textcolor{BrickRed
}{$<$
}n
\textcolor{BrickRed
}{;
}\
\textcolor{BrickRed
}{++
}i
\textcolor{BrickRed
}{)
}\
\textbf{\textcolor{Black
}{fill
}}\textcolor{BrickRed
}{(
}flow
\textcolor{BrickRed
}{[}i
\textcolor{BrickRed
}{],
}\ flow
\textcolor{BrickRed
}{[}i
\textcolor{BrickRed
}{]+
}n
\textcolor{BrickRed
}{,
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{);
} \\
88 \mbox{}\ \
\textcolor{ForestGreen
}{int
}\ ans\
\textcolor{BrickRed
}{=
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{;
} \\
89 \mbox{}\ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}\textbf{\textcolor{Blue
}{true
}}\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
90 \mbox{}\ \ \ \
\textbf{\textcolor{Black
}{fill
}}\textcolor{BrickRed
}{(
}prev
\textcolor{BrickRed
}{,
}\ prev
\textcolor{BrickRed
}{+
}n
\textcolor{BrickRed
}{,
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{);
} \\
91 \mbox{}\ \ \ \ queue
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{int
}\textcolor{BrickRed
}{$>$
}\ q
\textcolor{BrickRed
}{;
} \\
92 \mbox{}\ \ \ \ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{push
}}\textcolor{BrickRed
}{(
}s
\textcolor{BrickRed
}{);
} \\
93 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{size
}}\textcolor{BrickRed
}{()
}\
\textcolor{BrickRed
}{\&\&
}\ prev
\textcolor{BrickRed
}{[}t
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
94 \mbox{}\ \ \ \ \ \
\textcolor{ForestGreen
}{int
}\ u\
\textcolor{BrickRed
}{=
}\ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{front
}}\textcolor{BrickRed
}{();
} \\
95 \mbox{}\ \ \ \ \ \ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{pop
}}\textcolor{BrickRed
}{();
} \\
96 \mbox{}\ \ \ \ \ \ vector
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{int
}\textcolor{BrickRed
}{$>$
}\
\textcolor{BrickRed
}{\&
}out\
\textcolor{BrickRed
}{=
}\ g
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{];
} \\
97 \mbox{}\ \ \ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ k\
\textcolor{BrickRed
}{=
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{,
}\ m\
\textcolor{BrickRed
}{=
}\ out
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{size
}}\textcolor{BrickRed
}{();
}\ k
\textcolor{BrickRed
}{$<$
}m
\textcolor{BrickRed
}{;
}\
\textcolor{BrickRed
}{++
}k
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
98 \mbox{}\ \ \ \ \ \ \ \
\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ out
\textcolor{BrickRed
}{[}k
\textcolor{BrickRed
}{];
} \\
99 \mbox{}\ \ \ \ \ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
}v\
\textcolor{BrickRed
}{!=
}\ s\
\textcolor{BrickRed
}{\&\&
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\
\textcolor{BrickRed
}{\&\&
}\ cap
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{$>$
}\ flow
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{])
} \\
100 \mbox{}\ \ \ \ \ \ \ \ \ \ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ q
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{push
}}\textcolor{BrickRed
}{(
}v
\textcolor{BrickRed
}{);
} \\
101 \mbox{}\ \ \ \ \ \
\textcolor{Red
}{\
}} \\
102 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
104 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
}prev
\textcolor{BrickRed
}{[}t
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{==
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{)
}\
\textbf{\textcolor{Blue
}{break
}}\textcolor{BrickRed
}{;
} \\
106 \mbox{}\ \ \ \
\textcolor{ForestGreen
}{int
}\ bottleneck\
\textcolor{BrickRed
}{=
}\ INT$
\_$MAX
\textcolor{BrickRed
}{;
} \\
107 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ t
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{];
}\ u\
\textcolor{BrickRed
}{!=
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{;
}\ v\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{])
}\textcolor{Red
}{\
{} \\
108 \mbox{}\ \ \ \ \ \ bottleneck\
\textcolor{BrickRed
}{=
}\
\textbf{\textcolor{Black
}{min
}}\textcolor{BrickRed
}{(
}bottleneck
\textcolor{BrickRed
}{,
}\ cap
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{-
}\ flow
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]);
} \\
109 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
110 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}\textcolor{ForestGreen
}{int
}\ v\
\textcolor{BrickRed
}{=
}\ t
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{];
}\ u\
\textcolor{BrickRed
}{!=
}\
\textcolor{BrickRed
}{-
}\textcolor{Purple
}{1}\textcolor{BrickRed
}{;
}\ v\
\textcolor{BrickRed
}{=
}\ u
\textcolor{BrickRed
}{,
}\ u\
\textcolor{BrickRed
}{=
}\ prev
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{])
}\textcolor{Red
}{\
{} \\
111 \mbox{}\ \ \ \ \ \ flow
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{+=
}\ bottleneck
\textcolor{BrickRed
}{;
} \\
112 \mbox{}\ \ \ \ \ \ flow
\textcolor{BrickRed
}{[}v
\textcolor{BrickRed
}{][}u
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{=
}\
\textcolor{BrickRed
}{-
}flow
\textcolor{BrickRed
}{[}u
\textcolor{BrickRed
}{][}v
\textcolor{BrickRed
}{];
} \\
113 \mbox{}\ \ \ \
\textcolor{Red
}{\
}} \\
114 \mbox{}\ \ \ \ ans\
\textcolor{BrickRed
}{+=
}\ bottleneck
\textcolor{BrickRed
}{;
} \\
115 \mbox{}\ \
\textcolor{Red
}{\
}} \\
116 \mbox{}\ \
\textbf{\textcolor{Blue
}{return
}}\ ans
\textcolor{BrickRed
}{;
} \\
117 \mbox{}\textcolor{Red
}{\
}} \\
120 } \normalfont\normalsize